package day230519;

import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/5/19 14:15
 * 合唱团
 */
public class Main01 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt(); // 学生的个数
            int[] a = new int[n]; // 用于存储学生的能力值
            for (int i = 0; i < a.length; i++) {
                a[i] = scan.nextInt();
            }
            int k = scan.nextInt(); // 选取的 k 名学生
            int d = scan.nextInt(); // 相邻两个学生编号的最大范围
            long maxProduct = getMaxProduct(a, n, k, d);
            System.out.println(maxProduct);
        }
        scan.close();
    }

    // 采用动态规划的思路来获取k个学生能力值的最大乘积
    private static long getMaxProduct(int[] a, int n, int k, int d) {
        // maxValue[i][j] 表示选中第 i 个学生能力值的情况下, 以第 i 个为结尾选 j 个学生的最大乘积
        // minValue[i][j] 表示选中第 i 个学生能力值的情况下, 以第 i 个为结尾选 j 个学生的最小乘积(考虑负负得正的情况)
        long[][] maxValue = new long[n+1][k+1];
        long[][] minValue = new long[n+1][k+1];
        // 初始化状态, 对于 minValue[i][1] / maxValue[i][1] 其只能为 a[i-1]
        for(int i = 1; i <= n; i++) {
            maxValue[i][1] = a[i-1];
            minValue[i][1] = a[i-1];
        }
        // 对于 maxValue[i][j] 其状态量由 maxValue[m][j-1] 决定, 其中 m -> [i-d, i-1]
        long ret = 0L; // 用于记录最大乘积
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= k; j++) {
                for (int m = i-1; m >= Math.max(i-d, 1); m--) {
                    // 更新状态值
                    maxValue[i][j] = Math.max(maxValue[i][j],
                            Math.max(maxValue[m][j-1] * a[i-1], minValue[m][j-1] * a[i-1]));
                    minValue[i][j] = Math.min(minValue[i][j],
                            Math.min(maxValue[m][j-1] * a[i-1], minValue[m][j-1] * a[i-1]));
                }
            }
            // 更新结果
            ret = Math.max(ret, maxValue[i][k]);
        }
        // 返回结果
        return ret;
    }
}
